package com.itheima.api;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.mapper.SmsFlashPromotionMapper;
import com.itheima.pojo.SmsCoupon;
import com.itheima.pojo.SmsCouponHistory;
import com.itheima.pojo.SmsFlashPromotion;
import com.itheima.vo.PageResult;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * @author lenovo
 * @description 针对表【sms_flash_promotion(限时购表)】的数据库操作Service实现
 * @createDate 2022-10-11 14:26:17
 */
@DubboService
public class SmsFlashPromotionApiImpl implements SmsFlashPromotionApi {

    @Autowired
    private SmsFlashPromotionMapper flashPromotionMapper;

    //添加活动
    @Override
    public void flashPromotionCreate(SmsFlashPromotion smsFlashPromotion) {

        flashPromotionMapper.insert(smsFlashPromotion);
    }

    //删除活动
    @Override
    public void flashPromotionDelete(Long id) {
        flashPromotionMapper.deleteById(id);
    }

    //根据活动名称分页查询
    @Override
    public PageResult getPromotionByPage(String keyword, Integer pageNum, Integer pageSize) {
        LambdaQueryWrapper<SmsFlashPromotion> lqw = new LambdaQueryWrapper<>();
        //name可能为空
        //type可能为空
        lqw.like(StrUtil.isNotBlank(keyword), SmsFlashPromotion::getTitle, keyword)
                .orderByDesc(SmsFlashPromotion::getCreateTime);
        //分页
        //分页构造函数
        //Params:
        //pageNum – 当前页
        //pageSize – 每页显示条数
        IPage<SmsFlashPromotion> iPage = new Page<>(pageNum, pageSize);
        //根据 entity 条件，查询全部记录（并翻页）
        //Params:
        //page – 分页查询条件（可以为 RowBounds.DEFAULT）
        //queryWrapper – 实体对象封装操作类（可以为 null）
        flashPromotionMapper.selectPage(iPage, lqw);
        Integer total = Convert.toInt(iPage.getTotal());//总条数
        Integer totalPage = Convert.toInt(iPage.getPages());//当前分页总页数
        long size = iPage.getSize();//每页显示条数
        return new PageResult(pageNum, pageSize, total, totalPage, iPage.getRecords());
    }

    //修改上下线状态
    @Override
    public void updateStatus(Long id, Integer status) {
        //LambdaUpdateWrapper<SmsFlashPromotion> luw = new LambdaUpdateWrapper<>();
        LambdaUpdateWrapper<SmsFlashPromotion> luw = Wrappers.lambdaUpdate();
        luw.set(ObjectUtil.isNotNull(status), SmsFlashPromotion::getStatus, status);
        //根据 whereEntity 条件，更新记录
        //Params:
        //entity – 实体对象 (set 条件值,可以为 null)
        //updateWrapper – 实体对象封装操作类（可以为 null,里面的 entity 用于生成 where 语句
        SmsFlashPromotion flashPromotion = new SmsFlashPromotion();
        flashPromotion.setId(id);
        flashPromotionMapper.update(flashPromotion, luw);
        //int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);

    }

    //编辑活动
    @Override
    public void updatePromotion(SmsFlashPromotion flashPromotion) {
        flashPromotionMapper.updateById(flashPromotion);
    }

    //根据id找到flashPromotion
    @Override
    public SmsFlashPromotion findById(Long id) {
        return flashPromotionMapper.selectById(id);
    }


}




